﻿using System;
using System.Linq;
using System.Text;
using Spring.Data.Core;
using System.Collections;
using System.Data;
using Spring.Data;
using Spring.Data.Common;
using GestionadorBaseDatos;
using CRUD.InterfaceDAO;
namespace CRUD.DAO
{
    /// <summary>
    /// Clase encargada de interactuar con la tabla MANTENIMIENTO_PAGO del modelo
    /// </summary>
    public class MantenimientoPagoDao : AdoDaoSupport, IDaoMantenimientoPago
    {
        #region Querys para metodos


        private string SQL = @"select idMantenimientoPago, fechaMantenimientoP, descripcionMantenimientoP, nicknameMantenimientoP from mantenimiento_pago where idMantenimientoPago = @idMantenimientoPago";
        private string sqlGetAll = "select idMantenimientoPago, fechaMantenimientoP, descripcionMantenimientoP, nicknameMantenimientoP, idFormaMantenimientoP from mantenimiento_pago";
        private string sqlInsert = "INSERT INTO mantenimiento_pago (fechaMantenimientoP, descripcionMantenimientoP, nicknameMantenimientoP, idFormaMantenimientoP) VALUES (@fecha,@descripcion,@nicknameMantenimientoP,@idFormaMantenimientoP)";
        private string sqlMantenimientosPagoByPago = "select mp.idMantenimientoPago, mp.fechaMantenimientoP, mp.descripcionMantenimientoP, mp.nicknameMantenimientoP, mp.idFormaMantenimientoP" + " " +
                                                      "from mantenimiento_pago mp, pago p" + " " +
                                                      "where p.nicknamePago = @nicknamePago and p.idFormaPago = @idFormaPago and p.nicknamePago = mp.nicknameMantenimientoP and p.idFormaPago = mp.idFormaMantenimientoP";
        private string sqlMantenimientosPagoByUsuario = "select mp.idMantenimientoPago, mp.fechaMantenimientoP, mp.descripcionMantenimientoP, mp.nicknameMantenimientoP, mp.idFormaMantenimientoP" + " " +
                                                      "from mantenimiento_pago mp" + " " +
                                                      "where mp.nicknameMantenimientoP = @nickname";
        # endregion

        # region metodos


        public virtual IList GetAll()
        {
            System.Collections.IList lista = AdoTemplate.QueryWithRowMapperDelegate(CommandType.Text, sqlGetAll,
                        delegate(IDataReader iDataReader, int rowNum)
                        {
                            MantenimientoPago mantenimientoPago = new MantenimientoPago();
                            mantenimientoPago.IdMantenimientoPago = iDataReader.GetInt32(0);
                            mantenimientoPago.FechaMantenimientoP = iDataReader.GetDateTime(1);
                            mantenimientoPago.DescripcionMantenimientoP = iDataReader.GetString(2);
                            mantenimientoPago.UsuarioAsociado.Nickname = iDataReader.GetString(3);
                            mantenimientoPago.FormaPagoMantenimiento.IdFormaPago = iDataReader.GetInt32(4);
                            return mantenimientoPago;
                        });

            return lista;
        }

        public void Insert(MantenimientoPago crear)//string tipo, string descripcion)
        {

            IDbParameters dbParameters = AdoTemplate.CreateDbParameters();

            dbParameters.Add("@fecha", MySql.Data.MySqlClient.MySqlDbType.DateTime, 50).Value = crear.FechaMantenimientoP;
            dbParameters.Add("@descripcion", MySql.Data.MySqlClient.MySqlDbType.String, 50).Value = crear.DescripcionMantenimientoP;
            dbParameters.Add("@nicknameMantenimientoP", MySql.Data.MySqlClient.MySqlDbType.String, 50).Value = crear.UsuarioAsociado.Nickname;
            dbParameters.Add("@idFormaMantenimientoP", MySql.Data.MySqlClient.MySqlDbType.Int32, 50).Value = crear.FormaPagoMantenimiento.IdFormaPago;

            AdoTemplate.ExecuteNonQuery(CommandType.Text, sqlInsert, dbParameters);


        }

        public IList GetMantenimientosPagoByPago(Pago pago)
        {
            IDbParameters dbParameters = AdoTemplate.CreateDbParameters();

            dbParameters.Add("@nicknamePago", MySql.Data.MySqlClient.MySqlDbType.String, 50).Value = pago.UsuarioAsociado.Nickname;
            dbParameters.Add("@idFormaPago", MySql.Data.MySqlClient.MySqlDbType.Int32, 50).Value = pago.FormaPagoAsociado.IdFormaPago;

            return (IList)AdoTemplate.QueryWithRowMapper(CommandType.Text, sqlMantenimientosPagoByPago, new MantenimientoPagoRowMapper(), dbParameters);
        }

        public IList GetMantenimientosPagoByUsuario(Usuario usuario)
        {
            IDbParameters dbParameters = AdoTemplate.CreateDbParameters();

            dbParameters.Add("@nickname", MySql.Data.MySqlClient.MySqlDbType.String, 50).Value = usuario.Nickname;

            return (IList)AdoTemplate.QueryWithRowMapper(CommandType.Text, sqlMantenimientosPagoByUsuario, new MantenimientoPagoRowMapper(), dbParameters);
        }

        # endregion
    }
}
